#include #include #include #include #include using namespace std; vector primes; void gen_primes(long long up_limit, vector & is_prime) { for (long long i = 2; i <= up_limit; i++) { if (is_prime[i]) { primes.push_back(i); long long k = i * i; while (k <= up_limit) { is_prime[k] = false; k += i; } } } } long long calc(long long n) { long long result = 0; long long k = n; bool flag; while (k > 1) { flag = false; for (long long i = 0; i < primes.size(); i++) { if (k % primes[i] == 0) { flag = true; result += k; k /= primes[i]; break; } } if (not flag) { result += k; k = 1; } } result += 1; return result; } int main() { long long n, max_n = -1; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] > max_n) max_n = a[i]; } long long up_limit = sqrt(max_n); vector is_prime(up_limit + 1, true); long long result = 0; gen_primes(up_limit, is_prime); for (auto x: a) { result += calc(x); } cout << result << '\n'; return 0; }