#pragma GCC optimize(2)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define N 100005
#define M 10000005
#define LL long long
using namespace std;
int c[N],n,m,dis[N],f[N],m1,m2;
int lt[M],lt1[M];
LL ans;
bool bz[N];
struct node
{
int x,y,c;
friend bool operator <(node x,node y)
{
return x.c<y.c;
}
}a[5*M];
int getf(int k)
{
if(f[k]==k||f[k]==0) return k;
return f[k]=getf(f[k]);
}
int main()
{
cin>>n;
int mx=0;
fo(i,1,n) scanf("%d",&c[i]),mx=max(mx,c[i]);
sort(c+1,c+n+1);
m1=n-1;
fo(i,1,n)
{
if(c[i]!=c[i-1]) lt[c[i]]=i,lt1[c[i]-1]=i;
if(c[i]==c[i+1]) m1--,f[getf(i+1)]=getf(i);
}
fod(i,mx,1)
{
if(lt[i]==0) lt[i]=lt[i+1];
if(lt1[i]==0) lt1[i]=lt1[i+1];
}
fo(i,1,n)
{
if(c[i]!=c[i-1])
{
for(int j=1;c[i]*j<=mx;j++)
{
if(j>1&<[c[i]*j]==lt[c[i]*(j-1)]) continue;
int y=lt[c[i]*j];
if(j==1) y=lt1[c[i]*j];
if(y==0) continue;
a[++m].c=c[y]%c[i];
a[m].y=y,a[m].x=i;
}
}
}
sort(a+1,a+m+1);
LL ans=0;
for(int i=1;i<=m&&m1;i++)
{
int fx=getf(a[i].x),fy=getf(a[i].y);
if(fx!=fy) ans+=a[i].c,f[fx]=fy,m1--;
}
printf("%lld",ans);
}