#include <memory.h> #include <algorithm> #include <bitset> #include <cassert> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iomanip> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <stack> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> using namespace std; typedef long long ll; typedef long double ldbl; const int MAX = 10000007; int lp[MAX]; int pr[664580], pr_cnt; deque<ll> fff(ll n) { deque<ll> ret; int pr_ind = 0; while (n > 1 && pr_ind < pr_cnt && 1ll * pr[pr_ind] * pr[pr_ind] <= n) { while (n % pr[pr_ind] == 0) { n /= pr[pr_ind]; ret.push_back(pr[pr_ind]); } pr_ind++; } if (n > 1) { ret.push_back(n); } return ret; } ll solve(const ll n, deque<ll>& pf) { if (pf.empty()) { return 1; } const ll f = pf.front(); pf.pop_front(); return 1 + f * solve(n / f, pf); } int main() { for (int i = 2; i < MAX; ++i) { if (!lp[i]) { lp[i] = i; pr[pr_cnt++] = i; } for (int j = 0; j < pr_cnt && pr[j] <= lp[i] && i * pr[j] < MAX; j++) { lp[i * pr[j]] = pr[j]; } } ll ans = 0; int k; scanf("%d", &k); while (k--) { ll n; scanf("%lld", &n); deque<ll> pf = fff(n); reverse(pf.begin(), pf.end()); ans += solve(n, pf); } printf("%lld\n", ans); return 0; }