import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static List cfact(long b) { //list of factors of n List ls = new ArrayList(); /*for (long i = 1; i <= Math.sqrt(b); i++) { if (b % i == 0) ls.add(i); } int si = ls.size(); for (int i = 0; i < si-1; i++) { ls.add(b/ls.get(i)); }*/ for (long i = 1; i <= b; i++) { if (b % i == 0) ls.add(i); } //if (Math.sqrt(b) != ls.get(si-1)) //ls.add(b/ls.get(si-1)); return ls; } static Map sol = new HashMap(); static long split(long s) { //max number of moves /*List factors = (ArrayList)cfact(s); if (factors.size() == 2) { //if prime sol.put(s, (long)1); return 1; } if (sol.containsKey(s)) //if solution already exists return sol.get(s); if (s == 1) return 0; long div = 1; //size of what to split into long max = 1+split(div)*s/div; for (int i = 1; i < factors.size()-1; i++) { long f = factors.get(i); if (sol.containsKey(f) && sol.get(f) > max) { div = f; max = sol.get(f); } else if (1+split(f)*s/f > max) { //compare, find max s/div(1 + countsub), split method compares countsub subsub contributes to sub //iterate for all factors of s, find maximum 1+split(f)*s/f div = f; max = 1+split(div)*s/div; } } if (div == 1) return 1; sol.put(s, max); return max; //a -> b:c x d; a:(1+cxd)*/ long c = 0; long p = 1; List factors = (ArrayList)pfact(s); for (int i = factors.size()-1; i >= 0; i--) { //System.out.print(factors.get(i) + " "); c += p; p *= factors.get(i); } return c; } static Map factsol = new HashMap(); static List primes = new ArrayList(); static void setprimes(long maxA) { Long[] ar = new Long[] {(long)2, (long)3, (long)5, (long)7};//, (long)11, (long)13, (long)17, (long)19, (long)23, (long)29, (long)31, (long)37, (long)41, (long)43, (long)47, (long)53, (long)59, (long)61, (long)67, (long)71, (long)73, (long)79, (long)83, (long)89, (long)97, (long)101}; primes = new ArrayList(Arrays.asList(ar)); for (long i = 11; i <= maxA; i++) { /*if (i % 2 == 0) continue;*/ /*for (long l = 3; l < Math.sqrt(i); l += 2) { if (i % l == 0) break; } if ()*/ int j; int s = primes.size(); for (j = 0; j < 2 * Math.sqrt(s) / Math.log(s) - 1; j++) { //Math.sqrt(primes.size())-1 if (i % primes.get(j) == 0) break; } if (i % primes.get(j) != 0) primes.add(i); } } static List pfact(long b) { //prime factor instances of b List ls = new ArrayList(); /*List cr = new ArrayList(); while (b != 1) { if (factsol.containsKey(b)) { ls.addAll(factsol.get(b)); for (int j = 0; j < cr.size(); j++) { factsol.get(cr.get(j)).add(b); } break; } else { factsol.put(b, new ArrayList()); cr.add(b); } int done = 0; for (long i = 2; i <= Math.sqrt(b)+1; i++) { //for (int f = 0; f < primes.size(); f++) { //long i = primes.get(f); if (b % i == 0) { ls.add(i); b /= i; for (int j = 0; j < cr.size(); j++) { factsol.get(cr.get(j)).add(i); } //factsol.put(b, new ArrayList()); //cr.add(b); done = 1; break; } } if (done == 0) { ls.add(b); for (int j = 0; j < cr.size(); j++) { factsol.get(cr.get(j)).add(b); } b = 1; } } Collections.sort(ls);*/ while (b != 1) { boolean done = false; for (long i = 2; i <= Math.sqrt(b)+1; i++) { if (b % i == 0) { ls.add(i); b /= i; done = true; break; } } if (!done) { ls.add(b); b = 1; } } return ls; } /*static long max(long i) { if (sol.containsKey(i)) return sol.get(i); else return }*/ /*static long countsub(long s, int div) { return 1 + split(div) * s/div; }*/ static long longestSequence(long[] a) { //split into most number of bars /*long max = 0; for (int i = 0; i < a.length; i++) { if (a[i] > max) max = a[i]; } setprimes(max);*/ long s = 0; for (int i = 0; i < a.length; i++) { s += a[i] + split(a[i]); } //System.out.println(primes.get(primes.size()-1)); return s; // Return the length of the longest possible sequence of moves. } public static void main(String[] args) { long start = System.currentTimeMillis(); 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(); long end = System.currentTimeMillis(); //System.out.println(end - start); //System.out.println(Arrays.asList(factsol)); } }