#include #define l long long #define rep(i,a,b) for(l i =a;i primes; bool pr[N]; bool ispr(l a) { if (a < N) return pr[a]; rep(i,0,primes.size()) { if (a % primes[i] == 0 && a != primes[i]) return false; } return true; } void sieve() { rep(i,0,N) pr[i] = true; pr[0] = pr[1] = false; rep(i,2,N) { if (!pr[i]) continue; for (l j = i*2; j < N; j+=i) { pr[j] = false; } primes.push_back(i); } } l solve(l a) { l ans = a; // cout << primes.size() << "\n"; // if (ispr(a)) return (a + 1); while (a % 2 == 0) { ans += (a/2); a/=2; } rep(i,3,N) { while (a % i == 0) { ans += a/i; a/=i; } } if (a > 2) { ans++; } return ans; /* rep(i,0,primes.size()) { if (a % primes[i] == 0) { while (a%primes[i] == 0) { ans += a/primes[i]; a/=primes[i]; } } } return ans; */ } long longestSequence(vector a) { sieve(); l ans = 0; rep(i,0,a.size()) { ans += solve(a[i]); } return ans; // Return the length of the longest possible sequence of moves. } int main() { int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }