#define _CRT_SECURE_NO_WARNINGS #define TASK "experimental" #pragma comment(linker, "/STACK:2010886400") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int MOD = 1000000007; const int INF = 1000000001; const long double EPS = 1e-15; const int HASH_POW = 29; const long double PI = acos(-1.0); mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); long long rndNext(long long l, long long r) { uniform_int_distribution foo(l, r); return foo(rnd); } double workTime() { return double(clock()) / CLOCKS_PER_SEC; } void myReturn(int code = 0) { #ifdef MYDEBUG cout << "\nTime = " << fixed << setprecision(3) << workTime() << endl; #endif exit(code); } bool prime[1000010]; vector lst; int main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifdef MYDEBUG freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else /*freopen(TASK".in", "r", stdin); freopen(TASK".out", "w", stdout);*/ #endif memset(prime, true, sizeof prime); for (int i = 2; i <= 1000; ++i) { if (prime[i]) { for (int j = i*i; j <= 1000000; j += i) { prime[j] = false; } } } for (int i = 2; i <= 1000000; ++i) { if (prime[i]) { lst.push_back(i); } } int CASE; scanf("%d", &CASE); long long total = 0; while (CASE-- > 0) { long long a; scanf("%lld", &a); queue Q; for (int i = 0; i < lst.size(); ++i) { while (a % lst[i] == 0) { Q.push(lst[i]); a /= lst[i]; } } if (a != 1) { Q.push(a); } long long ans = 1; while (!Q.empty()) { ans = Q.front()*ans + 1; Q.pop(); } total += ans; } printf("%lld\n", total); myReturn(); }