#include #include #include #include #include #include using namespace std; typedef unsigned long long ull; static void factorize(ull n, vector>& factors) { int const kMaxPrime = 1e6; static vector primes; // all primes under 1e6 if (0 == primes.size()) { // initialize bool* sieve = new bool[kMaxPrime+1]; memset(sieve, true, sizeof(bool) * kMaxPrime+1); sieve[0] = sieve[1] = false; for (int i = 2; i <= (kMaxPrime>>1); i++) if (sieve[i]) for (int j = i + i; j <= kMaxPrime; j += i) sieve[j] = false; for (int i = 2; i <= kMaxPrime; i++) if (sieve[i]) primes.push_back(i); delete [] sieve; } for (int i = 0; (i < primes.size()) && (n > 1); i++) { if (0 == (n % primes[i])) { factors.push_back({primes[i], 0}); do { n /= primes[i]; factors.back().second++; } while (0 == (n % primes[i])); } } if (n > 1) factors.push_back({n, 1}); } static ull solve(ull n) { if (1 == n) return 1; vector> factors; factorize(n, factors); ull ans = 1; ull i = 1; while (factors.size()) { i *= factors.back().first; n /= factors.back().first; factors.back().second--; if (0 == factors.back().second) factors.pop_back(); ans += i; } return ans; } int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } ull ans = 0; for (int i = 0; i < n; i++) ans += solve(a[i]); cout << ans << endl; return 0; }