#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> // Common file //#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update #include <stdio.h> #include <cassert> using namespace std; //using namespace __gnu_pbds; typedef long long lo; typedef pair<lo,lo> ll;//pair typedef vector<lo> vl; //vector of long typedef vector<ll > vll; //vector of pair typedef priority_queue<lo>p_q; typedef vector< vl > vvl; //vector of vectors #define X first #define Y second #define mp(a,b) make_pair((a),(b)) #define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i #define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j #define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable #define IREP(a,b) for(lo i=(a);i>=(b);i--) #define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--) #define all(v) (v).begin(),(v).end() #define TRV(a) for(auto it : a) #define INF 500 #define MOD 1000000007 #define M 1000000007 #define CHECK_BIT(var,pos) ((var) & (1<<(pos))) #define pb(a) push_back((a)) #define endl "\n" #define eps 1e-9 #define PI 3.141592653589793 template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) { if ( v.size() >0 )o<<v[0]; for ( unsigned i=1; i<v.size(); i++ )o<<" "<<v[i]; return o<<endl; } template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) { return o<<"("<<p.first<<", "<<p.second<<") "; } template<typename T> istream& operator>> ( istream &in,vector<T> &v ) { for ( unsigned i=0; i<v.size(); i++ )in>>v[i]; return in; } template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) { in>>p.X; in>>p.Y; return in; } #define debug(x) cout<<#x<<"="<<x<<endl; /* bool miillerTest(int d, int n) { // Pick a random number in [2..n-2] // Corner cases make sure that n > 4 int a = 2 + rand() % (n - 4); // Compute a^d % n int x = power(a, d, n); if (x == 1 || x == n-1) return true; // Keep squaring x while one of the following doesn't // happen // (i) d does not reach n-1 // (ii) (x^2) % n is not 1 // (iii) (x^2) % n is not n-1 while (d != n-1) { x = (x * x) % n; d *= 2; if (x == 1) return false; if (x == n-1) return true; } // Return composite return false; } // It returns false if n is composite and returns true if n // is probably prime. k is an input parameter that determines // accuracy level. Higher value of k indicates more accuracy. bool isPrime(int n, int k) { // Corner cases if (n <= 1 || n == 4) return false; if (n <= 3) return true; // Find r such that n = 2^d * r + 1 for some r >= 1 int d = n - 1; while (d % 2 == 0) d /= 2; // Iterate given nber of 'k' times for (int i = 0; i < k; i++) if (miillerTest(d, n) == false) return false; return true; }*/ int main(){ std::ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);cout.precision(20); lo n; lo answer=0; cin>>n; while(n--){ lo a; cin>>a; vl ans; for(lo i=2;i<1000001;i++){ while(a%i==0){ a/=i; ans.pb(i); } } if(a>1)ans.pb(a); sort(all(ans)); lo x=1; lo res=0; IREP(ans.size()-1,0){ res+=x; x*=ans[i]; } res+=x; answer+=res; } cout<<answer; return 0; }