#include using namespace std; using ull = long long ; bool isPrime(long long n) { if(n==1l) return false; if(n==2l) return true; if(!(n&1l)) return false; for(long long i=3l; i*i <= n ; i+=2l) if((n%i) == 0l) return false; return true; } set seive(int N) { bool *primes = (bool*)calloc(N+1,sizeof(bool)); set ans; for(int i=2;i<=sqrt(N);i++) { if(primes[i]==false) { for(int j=i*i;j<=N;j+=i) primes[j] = true; } } for(int i=2;i<=N;i++) if(!primes[i]) ans.insert(i); return ans; } set primes; long long largestPrimeFactor(long long n) { long long maxPrime = -1; while (n % 2 == 0) { maxPrime = 2; n >>= 1; } for (int i = 3; i <= sqrt(n); i += 2) { while (n % i == 0) { maxPrime = i; n = n / i; } } if (n > 2) maxPrime = n; return maxPrime; } // long long largestPrimeFactor(long long n) // { // long long t = sqrt(n); // auto it = ::primes.lower_bound(t); // while(*it>=2) // { // cerr << *it << endl; // if(n%*it==0) // return n/(*it); // if(*it==2 && n%2==0) return // --it; // } // return n; // } long long fun(long long num) { if(num==1l) return 1l; if(isPrime(num)) return num+1l; else { long long x = largestPrimeFactor(num); return 1 + x*fun(num/x); } } int main() { int n; cin >> n; long long ans = 0; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; if(isPrime(a[i])) ans += a[i]+1; else ans += fun(a[i]); } cout << ans << endl; return 0; }