#include using namespace std; typedef pair pii; typedef pair pip; #define x first #define y second #define mp make_pair const int N = 1e6 + 5; typedef long long ll; bool bol[N]; int top = 0; int prime[N]; int max_div[N]; ll dp[N]; int main() { memset(bol, true, sizeof bol); max_div[1] = 1; for(int i = 2; i < N; i++) { if (bol[i]) { prime[++top] = i; max_div[i] = i; for(int j = i + i; j < N; j += i) { bol[j] = false; max_div[j] = max(max_div[j], i); } } } dp[1] = 1; for(int i = 2; i < N; i++) { int cur = i; while(cur != 1) { int divisor = max_div[cur]; dp[i] = max(dp[i], 1 + divisor*dp[i/divisor]); while(cur % divisor == 0) { cur /= divisor; } } // printf("%d %lld\n",i, dp[i]); } int n; scanf("%d",&n); ll GG = 0; for(int i = 1; i <= n; i++) { ll k; scanf("%lld",&k); ll save = k; // if (k < N) { // ans += dp[k]; // } else { ll maks = -1; ll ans = 1; for(int j = 1; j <= top; j++) { if (k % prime[j] == 0) { maks = max(maks, (ll)prime[j]); while(k % prime[j] == 0) { ans = 1 + prime[j] * ans; k /= prime[j]; } } if (k < prime[j]) break; } maks = max(maks, k); if (k!=1) ans = 1 + k * ans; GG += ans; // printf("%lld\n",ans); } // } printf("%lld\n",GG); return 0; }