#include <iostream> #include <vector> #include <algorithm> #include <string> #include <ctype.h> #include <deque> #include <cstring> #include <set> #include <bitset> #include <map> #include <chrono> #include <random> #include <unordered_map> #include <stdio.h> using namespace std; typedef long long ll; typedef long double ld; typedef std::vector<int> vi; typedef std::vector<bool> vb; typedef std::vector<string> vs; typedef std::vector<double> vd; typedef std::vector<long long> vll; typedef std::vector<std::vector<int> > vvi; typedef vector<vll> vvll; typedef std::vector<std::pair<int, int> > vpi; typedef vector<vpi> vvpi; typedef std::pair<int, int> pi; typedef std::pair<ll, ll> pll; typedef std::vector<pll> vpll; const long long mod = 1000000007; const unsigned gen_seed = std::chrono::system_clock::now().time_since_epoch().count(); std::mt19937_64 gen(gen_seed); #define all(c) (c).begin(),(c).end() #define forn(i, a, b) for(int i = a; i < b; i++) #define read(x) scanf("%d", &x) #define readv(x, n) vi x(n); forn(i,0,n) scanf("%d", &x[i]) #define pb push_back #define mp make_pair int main() { const int LIMIT = 1000000; vb isp(LIMIT+1, true); vi mindiv(LIMIT+1, 0); forn(i,0,LIMIT+1) mindiv[i]=i; int upbound = (int)sqrt((double)LIMIT); vi p; for (int m = 2; m <= upbound; m++) { if (isp[m]) { p.pb(m); for (int k = m * m; k <= LIMIT; k += m) { isp[k] = false; mindiv[k]=min(mindiv[k], m); } } } for(int m = upbound+1; m<=LIMIT; m++) { if (isp[m]) { p.pb(m); } } int n; scanf("%d", &n); ll ans = 0; forn(i,0,n) { ll k; scanf("%lld", &k); vll div; for(auto d : p) { if(k== 1) break; while(k%d ==0) div.pb(d), k/=d; } ll res = 1; if(k>1) div.pb(k); for(auto d : div) res = res*d + 1; ans += res; } cout<<ans; }