#include #include #include #include #include using namespace std; void sieve(vector& primes) { bool* check = new bool[1000001]; for (int i = 0; i < 1000001; i++) check[i] = (i % 2 == 0 && i > 2) ? false : true; //primes.push_back(2); for (int i = 3; i <= 1000000; i += 2) { if (check[i]) primes.push_back(i); if (i <= 1000) for (int j = i * i; j <= 1000000; j += i) { check[j] = false; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector primes, slices; primes.reserve(78500); sieve(primes); int64_t moves = 0; for (int i = 0; i < n; i++) { int64_t a; cin >> a; if (a == 1) { moves += 1; continue; } else if (a == 2) { moves += 3; continue; } slices.clear(); while ((a & 1) == 0) { slices.push_back(2); a >>= 1; } for (int j = 0, end = primes.size(); j < end; ++j) { int64_t prime = primes[j]; if (prime * prime > a) break; while (a % prime == 0) { slices.push_back(prime); a /= prime; } } if (a > 1) slices.push_back(a); int64_t pieces = 1; for (int j = slices.size() - 1; j >= 0; j--) { int64_t slice = slices[j]; moves += pieces; pieces *= slice; } moves += pieces; } cout << moves << "\n"; return 0; }