#include #include #include #include #include #include #include using namespace std; vector> split(long long a) { vector> r; long long k = 2; while (k*k <= a) { if (a%k == 0){ int m = 1; a /= k; while (a%k == 0){ ++m; a /= k; } r.emplace_back(k, m); } ++k; } if (a > 1) r.emplace_back(a, 1); return r; } void alld(vector> &sp, vector &d, size_t k, long long so_far) { if (k >= sp.size()){ if (so_far > 1) d.push_back(so_far); return; } for (int m = 0; m <= sp[k].second; ++m) { alld(sp, d, k + 1, so_far); so_far *= sp[k].first; } } long long mm(vector &d, map &cm, long long a) { if (a == 1) return 1; auto &r = cm[a]; if (r == 0) { long long best = a + 1; for (long long k: d) { if (k >= a) break; if (a%k == 0){ long long c = 1 + k*mm(d, cm, a/k); best = max(best, c); } } r = best; } return r; } long long mm(long long a) { auto sp = split(a); vector d; alld(sp, d, 0, 1); map cm; return mm(d, cm, a); } int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } /* Enter your code here. Print output to STDOUT */ long long cnt = 0; for (long long x: a) cnt += mm(x); cout << cnt << endl; return 0; }