#include #include #include #include #include #include using namespace std; const int N = 2e6; long long dp[N]; bool isPrime[N+1]; int lp[N+1]; vector pr; int main() { for(int i = 2; i < N; ++i) isPrime[i] = true; for(long long i = 2; i < N; ++i) for(long long j = i*i; j < N; j += i) isPrime[j] = false; for (int i=2; i<=N; ++i) { if (lp[i] == 0) { lp[i] = i; pr.push_back (i); } for (int j=0; j<(int)pr.size() && pr[j]<=lp[i] && i*pr[j]<=N; ++j) lp[i * pr[j]] = pr[j]; } dp[1] = 1; for(int i = 2; i < N; ++i) { int j = i; int d = 0; while(j != 1) { d = lp[j]; j /= lp[j]; } long long k = d*dp[i/d] + 1; dp[i] = max(dp[i], k); } int t; cin >> t; long long answer = 0; while(t--) { vector divisors; long long s; cin >> s; long long ss = s; long long curCountParts = 1; answer += s; for(long long i = 2; i*i <= s; ++i) { while(s % i == 0) { divisors.push_back(i); s /= i; } } if (s != 1) divisors.push_back(s); reverse(divisors.begin(), divisors.end()); for(int i = 0; i < divisors.size(); ++i) { answer += curCountParts; curCountParts *= divisors[i]; } } cout << answer << endl; return 0; }