#define _p(...) (void)printf(__VA_ARGS__) #define fi first #define infInt 2147483647 #define infLongInt 2147483647 #define infLongLongInt 9223372036854775807 #define ll long int #define lld long long int #define mp make_pair #define pb push_back #define pii pair #define vi vector #define vpii vector #define SZ(x) ((int)(x.size())) #define IN(x,y) ((y).find((x))!=(y).end()) #define PI 3.14159265 #define foreach(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) #define rep(i,n) for(int i=0;i // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // over write the sqrt of orinal c function // #include // #include const int MOD = 1e9 + 7; using namespace std; template void priArr(T a[],int i,int j,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; repd(b,i,j) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priArr(T a[],int i,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; rep(b,i+1) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priVec(T a,int i,int j,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; repd(b,i,j) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; } if(!nl) newline } template void priVec(T a,int i,string name="",bool nl = false) { if(name!= "" && nl) cout << name << "\n"; if(name!= "" && !nl) cout << name << " "; int p = 0; rep(b,i) { if(nl) cout << b << ":" << a[b] << "\n"; else cout << b << ":" << a[b] << " "; p++; } if(!nl) newline } template lld max1(T a,P b) { return a>b ? a :b; } template T min1(T a,T b) { return a T max1(T a,T b,T c) { return max1(a,max1(b,c)); } template T min1(T a,T b,T c) { return min1(a,min1(b,c)); } template T abs1(T a,T b) { return a>b ? a-b : b-a; } template void swap1(T a,T b) { T temp = b; b = a; a = temp; } template void swap1(T a[],int i,int j) { T temp = a[i]; a[i] = a[j]; a[j] = temp; } template void reset(T array[],int size,P value) { rep(i,size) array[i] = value; } //dont do silly mistake as always- //1-int or long long int or ull //2-do u understand question correctly? //3-MOST IMP-BE CALM YOU CAN DO:) //4-think edge case or corner case before submitting. //5-Think weather to use long long or long or int plau safe side on single variable. const int MAXN = 100000 ; const int MAXM = 100000 + 10; bool hack = false; int t,n; int freq[MAXM] ={0}; lld sum = 0; unordered_map mapping; void findFreq() { repd(i,2,MAXN) freq[i] = 1; for (int i = 2; i <= MAXN ; ++i) for (int j = i+i ; j <= MAXN ; j+=i) freq[j] = max1(freq[j],freq[i]*(j/i)+1); } lld recursiveDevide(lld p) { lld maxi = 0; for (lld i = 2; i*i <= p ; ++i) { if(p%i == 0) { if(i*i == p) { if(i<=MAXN) maxi = max1(maxi,i*freq[i]+1); else if(!IN(i,mapping)) { mapping[i] = recursiveDevide(i); maxi = max1(maxi,i*mapping[i]+1); } else maxi = max1(maxi,i*mapping[i]+1); } else { if(p/i <= MAXN) maxi = max1(maxi,i*freq[p/i]+1); else if(!IN(p/i,mapping)) { mapping[p/i] = recursiveDevide(p/i); maxi = max1(maxi,i*mapping[p/i]+1); } else maxi = max1(maxi,i*mapping[p/i]+1); if(i <= MAXN) maxi = max1(maxi,(p/i)*freq[i]+1); else if(!IN(i,mapping)) { mapping[i] = recursiveDevide(i); maxi = max1(maxi,(p/i)*mapping[i]+1); } else maxi = max1(maxi,(p/i)*mapping[i]+1); } } } if(maxi == 0) mapping[p] = 1; return max1(maxi,1); // if(maxi == 0) return freq[p]; // else return maxi; } int main(int argc, char const *argv[]) { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); findFreq(); // priArr(freq,40,"freq"); cin >> n; sum = 0; rep(i,n) { lld p; cin >> p; if(p < MAXN) sum += p + freq[p]; else if(IN(p,mapping)) sum += p + mapping[p]; else { sum += recursiveDevide(p) + p; } } cout << sum << endl; return 0; }