#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <climits>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <cassert>
#include <vector>
#define all(x) x.begin() , x.end()
#define fi first
#define se second
#define pb push_back
#define umax( x , y ) x = max( x , (y) )
#define umin( x , y ) x = min( x , (y) )
#define For( i , a ) for(int i=1;i<=a;i++)
#define ort (b+s)/2
#define y2 asrwjaelkf
#define y1 asseopirwjaelkf
#define set multiset

using namespace std;

inline int read() {
    int res = 0 ;int neg ;
    while(true){char ch = getchar();if(ch>='0' && ch<='9' || ch=='-'){if(ch=='-') neg = -1;else neg = 1 , res = ch-'0';break;} }
    while(true){char ch = getchar();if(ch>='0' && ch<='9') res*=10 , res+=ch-'0';else break;}
    return res*neg;
}


typedef long long Lint;
typedef double db;
typedef pair<int,int> ii;
typedef pair<int,db> id;
typedef pair<db,ii> dii;
typedef pair<int,ii> iii;
typedef pair<ii,ii> i4;

const int maxn = 201020;
const int maxm = 10000020;
const int MOd = 1e9 + 7;
const int K = 300;

struct node {
    int x, y;
    vector<int> v;
    node() {}
    node(int _x, int _y) {
        x=_x;
        y=_y;
    }
    node(int _x, int _y, vector<int> _v) {
        x=_x;
        y=_y;
        v=_v;
    }
};


map<Lint,Lint> mp;

Lint f( Lint a ) {
    vector<Lint> v;
    for(Lint i=2;i*i<=a;i++)
        while( a % i == 0 ) {
            v.pb( i );
            a /= i;
        }
    if( a != 1 ) v.pb( a );
    Lint x = 1, ans = 0;
    sort( all( v ) );
    for(int i=v.size()-1;i>=0;i--) {
        ans += x;
        x *= v[i];
    }
    return ans + x;
}

int a;

int main() {

    //freopen("asd.in","r",stdin);
    //freopen("out.txt","w",stdout);
    scanf("%d",&a);
    Lint ans = 0;
    for(int i=1;i<=a;i++) {
        Lint t;
        scanf("%lld",&t);
        ans += f( t );
    }
    printf("%lld\n",ans);
    return 0;
}