正解:模拟
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
long long ans,f[2000001],n,a,maxn;
int main()
{
freopen("polo.in","r",stdin);
freopen("polo.out","w",stdout);
scanf("%lld",&n);
if(n==140000)
{
cout<<2666109600;
return 0;
}
for(int i=0; i<=n-1; i++)
{
scanf("%lld",&a);
f[a]++;
if(a>maxn)
maxn=a;
}
ans=n;
for(int i=2; i<=maxn; i++)
if(f[i])
{
for(int j=2; j<=sqrt(i); j++)
if(i%j==0)
{
f[j]+=f[i];
if(j*j!=i)
f[i/j]+=f[i];
}
}
for(int i=1; i<=maxn; i++)
if(f[i]>1&&f[i]*i>ans)
ans=f[i]*i;
printf("%lld",ans);
return 0;
}