import java.util.Arrays; import java.util.HashMap; import java.util.Scanner; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author Nehal Kalnad */ class bSticks { public static boolean isPrime(long num , boolean[] prime) { for(int i = 2 ; i <= (int)Math.sqrt(num) ; i++ ) { if(prime[i] && num%i == 0) return false; } return true; } public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long[] a = new long[n]; for(int i = 0 ; i < n ; i++) a[i] = sc.nextLong(); boolean[] prime = new boolean[1000002]; for(int i=0;i<=1000001;i++) prime[i] = true; for(int p = 2; p*p <=1000001; p++) { if(prime[p] == true) { for(int i = p*2; i <= 1000001; i += p) prime[i] = false; } } long ans = 0 , tempu = 0; for(int i = 0 ; i < n ;i++) { long sam = a[i]; tempu = 0; // System.out.println(ans + " shit "); if(sam == 1) { ans++; continue; } else { long prev = 1; int start; if(sam > 1000000) { if(isPrime(sam , prime)) { ans+=(sam+1); continue; } else start = (int)Math.sqrt(sam); } else if(prime[(int)sam]) { ans+=(sam+1); continue; } else start = (int)sam; tempu+=sam; while(sam>1) { for(int j = start ; j > 1 ; j--) { if(prime[j]) { if(sam%j == 0) { // System.out.println(sam + " " + prev + " " + j) ; tempu+=prev; sam/=j; prev*=j; start = j; break; } } } if( (sam > 1000000 && isPrime(sam , prime) ) ) { //Finding biggest prime divisor of num > 1000000 tempu=a[i]; prev = 1; tempu+=prev; long j = sam; sam = a[i]; sam/=j; prev*=j; // New Start is num / biggest div // System.out.println(sam + " he "+ prev); start = (int)sam; } } } ans+=tempu; } System.out.println(ans); } } //10000000192 //14938271712 //14665201069 //14665214255 //14665201069 //58657468240