#include using namespace std; #define ST first #define ND second #define PB push_back #define MP make_pair #define REP(i, n) for (int (i) = 0; (i) < (n); (i)++) #define FOR(i, a, b) for (int (i) = (a); (i) <= (b); (i)++) #define FORD(i, b, a) for (int (i) = (b); (i) >= (a); (i)--) #define FORE(x, u) for (auto (x): (u)) #define ALL(u) (u).begin(), (u).end() #define INF 0x7fffffff #define INFLL 0x7fffffffffffffffLL typedef long long LL; typedef unsigned long long ULL; typedef long double LD; typedef pair PII; typedef pair PLL; typedef vector VI; typedef vector VLL; typedef vector VPII; typedef vector VPLL; typedef set SI; typedef set SLL; typedef set SPII; typedef set SPLL; inline void get(int &x) { scanf("%d", &x); } inline void get(LL &x) { scanf("%lld", &x); } inline void get(ULL &x) { scanf("%llu", &x); } inline void get(double &x) { scanf("%lf", &x); } inline void get(LD &x) { scanf("%Lf", &x); } inline void get(char *s) { scanf("%s", s); } inline void get(char &c) { while ((c = getchar()) > 126 || c < 33); } inline void put(int x) { printf("%d", x); } inline void put(LL x) { printf("%lld", x); } inline void put(ULL x) { printf("%llu", x); } inline void put(double x) { printf("%lf", x); } inline void put(LD x) { printf("%Lf", x); } inline void put(const char *s) { printf(s); } inline void put(char c) { putchar(c); } template inline void putl(const T &x) { put(x), put(' '); } template inline void putn(const T &x) { put(x), put('\n'); } const int MAXN = 1000000; bool isprime[MAXN]; VI primes; void eratostenes() { REP(i,MAXN) { isprime[i] = true; } isprime[0] = isprime[1] = false; for (int i = 2; i * i <= MAXN; i++) { if (isprime[i]) { for (int j = i + i; j < MAXN; j += i) { isprime[j] = false; } } } FOR(i,2,MAXN-1) { if (isprime[i]) { primes.PB(i); } } } LL largest_prime_divisor(LL a) { LL p = 1; int i = 0; while (a > 1 && i < primes.size()) { while (a % primes[i] == 0) { p = primes[i]; a /= primes[i]; } i++; } return a > 1 ? a : p; } LL eat(LL a) { LL steps = 0; LL parts = 1; while (a != 1) { LL p = largest_prime_divisor(a); steps += parts; parts *= p; a /= p; } return steps + parts; } int main() { int n; get(n); eratostenes(); LL result = 0; REP(i,n) { LL a; get(a); result += eat(a); } putn(result); return 0; }