import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static HashMap encontrados; static TreeSet primos; static long longestSequence(long[] a) { encontrados = new HashMap<>(); encontrados.put(1l, 1l); llenarCriba(); Arrays.sort(a); long total = 0; for (long ln: a) { total += longest(ln, divisores(ln)); } return total; } static void llenarCriba() { primos = new TreeSet<>(); HashSet visitados = new HashSet<>(); for (long i = 2; i < 1000001; i++) { if (!visitados.contains(i)) { primos.add((int) i); for (long j = i*i; j>0 && j < 1000001; j+=i) { visitados.add(j); } } } } static TreeMap divisores(long ln){ TreeMap divisores = new TreeMap<>(); for (long it: primos) { if (it*it > ln || ln == 1) { break; }else { while (ln % it == 0) { if (!divisores.containsKey(it)) { divisores.put(it, 1); }else { divisores.replace(it, divisores.get(it)+1); } ln = ln/it; } } } if (ln != 1) { if (divisores.containsKey(ln)) { divisores.replace(ln, divisores.get(ln)+1); }else { divisores.put(ln, 1); } } return divisores; } private static long longest(long ln, TreeMap treeMap) { if (encontrados.containsKey(ln)) { return encontrados.get(ln); }else { if (treeMap.size() == 0 || (treeMap.size() == 1 && treeMap.get(treeMap.firstKey()) == 1) || (ln < 1000001 && primos.contains((int)ln))) { encontrados.put(ln, ln+1); return ln+1; }else { long div = treeMap.lastKey(); if (treeMap.get(div) == 1) { treeMap.remove(div); }else { treeMap.replace(div, treeMap.get(div)-1); } long dividendo = ln/div; encontrados.put(dividendo, longest(dividendo, treeMap)); long valor = 1 + div*encontrados.get(dividendo); return valor; } } } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); long[] a = new long[n]; for(int a_i = 0; a_i < n; a_i++){ a[a_i] = in.nextLong(); } long result = longestSequence(a); System.out.println(result); in.close(); } }