#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define F first #define S second #define pb push_back #define epr(...) fprintf(stderr, __VA_ARGS__) #define db(x) cerr << #x << " = " << x << endl #define db2(x, y) cerr << "(" << #x << ", " << #y << ") = (" << x << ", " << y << ")\n"; #define db3(x, y, z) cerr << "(" << #x << ", " << #y << ", " << #z << ") = (" << x << ", " << y << ", " << z << ")\n" #define dbv(a) cerr << #a << ": "; for (auto& xxxx: a) cerr << xxxx << " "; cerr << endl; #define forn(i, n) for (int i = 0; i < (int)(n); i++) #define all(a) (a).begin(), (a).end() #define sz(a) (int)a.size() #define pw(n) (1ll << (n)) #define equal equalll #define less lesss typedef double dbl; typedef long long ll; const int N = -1; const int INF = 1.01e9; typedef vector vi; int main() { #ifdef HOME assert(freopen("in", "r", stdin)); #endif int T = 1e6 + 10; vector lp(T); vector pr; for (int i = 2; i < T; i++) { if (lp[i] == 0) { lp[i] = i; pr.pb(i); } for (int j = 0; j < sz(pr) && pr[j] <= lp[i] && i * pr[j] < T; j++) { lp[i * pr[j]] = pr[j]; } } int n; scanf("%d", &n); ll answer = 0; for (int i = 0; i < n; i++) { ll x; scanf("%lld", &x); answer += x; ll xx = x; vector div; for (auto y: pr) { if (y * y > x) break; for (; x % y == 0; x /= y) { div.pb(y); } } if (x > 1) { div.pb(x); } ll cnt = 1; sort(all(div)); reverse(all(div)); for (auto d: div) { xx /= d; answer += cnt; cnt *= d; } } cout << answer << endl; #ifdef HOME epr("time = %d ms\n", (int)(clock() * 1000. / CLOCKS_PER_SEC)); #endif return 0; }