#include #include #include #include #include #include using namespace std; vector primes; void SieveOfEratosthenes(long long int n); long long int get_ans(long long int a); int main() { int n; cin >> n; SieveOfEratosthenes(1000005); vector a(n); long long int ans = 0; for (int i = 0; i < n; i++) { cin >> a[i]; ans += get_ans(a[i]); } cout << ans << endl; return 0; } long long int get_ans(long long int a) { if(a == 1) { return 1; } long long int cur = primes[0]; long long int id = 0; long long int ans = a; //long long int prod = 1; while(cur*cur <= a) { if(a%cur == 0) { a /= cur; ans += a; } else { id++; cur = primes[id]; } } //cout << a << endl; return ans + 1; } void SieveOfEratosthenes(long long int n) { bool prime[n+1]; memset(prime, true, sizeof(prime)); for (long long int p=2; p*p<=n; p++) { // If prime[p] is not changed, then it is a prime if (prime[p] == true) { // Update all multiples of p for (long long int i=p*2; i<=n; i += p) prime[i] = false; } } // Print all prime numbers for (long long int p=2; p<=n; p++) if (prime[p]) primes.push_back(p); return; }