import java.io.*; import java.util.*; import java.math.*; class BreakingSticks { static HashMap hm = new HashMap<>(); public static void main(String args[]) { try { InputReader in = new InputReader(System.in); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out)); int n = in.readInt(); int MAX = (int)1e6 + 2; long solution[] = new long[MAX]; solution[0] = 0L; solution[1] = 1L; solution[2] = 3L; int at[] = new int[MAX]; for (int i = 2; i < MAX; i++) { solution[i] = Math.max(solution[i], i + 1); for (int j = 2 * i; j < MAX; j+=i) { int times = j / i; if (solution[j] < solution[i] * (long)times + 1) { at[j] = i; } solution[j] = Math.max(solution[j], solution[i] * (long)times + 1); } } for (int i = 0; i < MAX; i++) { if (solution[i] == 0) { solution[i] = i + 1; } } long ans = 0L; for (int i = 0; i < n; i++) { long num = in.readLong(); if (num < MAX) { ans += solution[(int)num]; continue; } long lans = 0L; for (int j = 2; j <= Math.sqrt(num); j++) { if (num % j == 0) { lans = Math.max(lans, findAns(j, solution) * (num / j) + 1); //lans = Math.max(lans, findAns(num / j, solution) * (j) + 1); } } if (lans == 0) { lans = num + 1; } ans += lans; } out.write(Long.toString(ans)); out.close(); } catch (Exception e) { e.printStackTrace(); } } private static long findAns(long i, long sol[]) { if (new BigInteger(""+i).isProbablePrime(5)) { return i + 1; } if (hm.containsKey(i)) { return hm.get(i); } if (i < sol.length) { return sol[(int)i]; } long ans = 0; for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { ans = Math.max(ans, findAns(j, sol) * (i / j) + 1); ans = Math.max(ans, findAns(i / j, sol) * j + 1); } } if (ans == 0) { ans = i + 1; } hm.put(i, ans); return ans; } } class InputReader { private boolean finished = false; private InputStream stream; private byte[] buf = new byte[1024]; private int curChar; private int numChars; public InputReader(InputStream stream) { this.stream = stream; } public int read() { if (numChars == -1) throw new InputMismatchException(); if (curChar >= numChars) { curChar = 0; try { numChars = stream.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (numChars <= 0) return -1; } return buf[curChar++]; } public int peek() { if (numChars == -1) return -1; if (curChar >= numChars) { curChar = 0; try { numChars = stream.read(buf); } catch (IOException e) { return -1; } if (numChars <= 0) return -1; } return buf[curChar]; } public int readInt() { int c = read(); while (isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } int res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public long readLong() { int c = read(); while (isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } long res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public String readString() { int length = readInt(); if (length < 0) return null; byte[] bytes = new byte[length]; for (int i = 0; i < length; i++) bytes[i] = (byte) read(); try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { return new String(bytes); } } public static boolean isSpaceChar(int c) { return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } private String readLine0() { StringBuffer buf = new StringBuffer(); int c = read(); while (c != '\n' && c != -1) { if (c != '\r') buf.appendCodePoint(c); c = read(); } return buf.toString(); } public String readLine() { String s = readLine0(); while (s.trim().length() == 0) s = readLine0(); return s; } public String readLine(boolean ignoreEmptyLines) { if (ignoreEmptyLines) return readLine(); else return readLine0(); } public BigInteger readBigInteger() { try { return new BigInteger(readString()); } catch (NumberFormatException e) { throw new InputMismatchException(); } } public char readCharacter() { int c = read(); while (isSpaceChar(c)) c = read(); return (char) c; } public double readDouble() { int c = read(); while (isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } double res = 0; while (!isSpaceChar(c) && c != '.') { if (c == 'e' || c == 'E') return res * Math.pow(10, readInt()); if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } if (c == '.') { c = read(); double m = 1; while (!isSpaceChar(c)) { if (c == 'e' || c == 'E') return res * Math.pow(10, readInt()); if (c < '0' || c > '9') throw new InputMismatchException(); m /= 10; res += (c - '0') * m; c = read(); } } return res * sgn; } public boolean isExhausted() { int value; while (isSpaceChar(value = peek()) && value != -1) read(); return value == -1; } public String next() { return readString(); } public boolean readBoolean() { return readInt() == 1; } }