#include using namespace std; long long n; unordered_map dp; long long dfs(long long val) { if (val == 1) { return 1; } if (dp.count(val)) { return dp[val]; } long long ret = val + 1; for (long long i = 2; i * i <= val; i++) { if (val % i == 0) { { long long calc = dfs(i) * (val / i) + 1; if (ret < calc) { cout << val << " : " << "(" << i << ", " << val / i << ")" << " = " << calc << endl; ret = calc; } else if (val == n) { cout << val << " : " << "(" << i << ", " << val / i << ")" << " = " << calc << endl; } } if (val / i != i) { long long calc = dfs(val / i) * i + 1; if (ret < calc) { cout << val << " : " << "(" << val / i << ", " << i << ")" << " = " << calc << endl; ret = calc; } else if (val == n) { cout << val << " : " << "(" << val / i << ", " << i << ")" << " = " << calc << endl; } } } } return dp[val] = ret; } vector func(long long val) { long long now = 2; if (val == 1) { return {1ll}; } vector v; while (val > 1) { while (val % now == 0) { val /= now; v.emplace_back(now); } now++; } return v; } std::map PrimeFactorDecomposition(long long num) { std::map res; for (long long i = 2; i * i <= num; i++) { int cnt = 0; while(num % i == 0) cnt++, num /= i; if (cnt) res[i] = cnt; } if (num != 1) res[num] = 1; return res; } long long calc(long long val, map &ps) { if (ps.size() == 1 && ps.begin()->second == 1) { return ps.begin()->first + 1; } long long get = ps.rbegin()->first; ps.rbegin()->second--; if (ps.rbegin()->second == 0) { ps.erase(ps.rbegin()->first); } return calc(val, ps) * get + 1; } int main() { int nn; cin >> nn; long long ans = 0; for (int i = 0; i < nn; i++) { long long a; cin >> a; if (a == 1) { ans++; continue; } auto ps = PrimeFactorDecomposition(a); ans += calc(a, ps); } cout << ans << endl; }