#include using namespace std; #define N 1123456 int isprime[N+2]; vector prime; void sieve() { for(int i=0;i<=N;i++) isprime[i] = i; isprime[0] = 0; isprime[1] = 0; int p = sqrt(N); for(int i= 2;i <= p;i++) { if(isprime[i] == i) { for(int j = i+i;j <= N;j += i) isprime[j] = i; } } for(int i= 2;i <= N;i++) if(isprime[i] == i) prime.push_back(i); } long long getans(long long val) { long long parts = 1; long long ans = val; // eating bool p; vector < long long > vi; long long tmp = val; for(int i =0;i < prime.size() && (long long)prime[i] * (long long)prime[i] <= val;i++) { if(val % prime[i] == 0) { while(val % prime[i] == 0) { val /= prime[i]; vi.push_back(prime[i]); } } } if(val != 1) vi.push_back(val); sort(vi.rbegin() , vi.rend()); for(int i=0;i < vi.size();i++){ ans += parts; parts *= vi[i]; } return ans; } int main(int argc, char const *argv[]) { sieve(); //cout << prime.size() << endl; int n; cin >> n; long long val , ans = 0; for(int i=0;i> val; ans += getans(val); } cout << ans << endl; return 0; }