#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans,p,x[10000001],nex[10000001];
bool vis[10000001];
int ef(int l,int r,int re){
while(l<r){
int mid=(l+r)>>1;
if(x[mid]<=re) r=mid;
else l=mid+1;
}
return l;
}
void dfs(int id,int le,int re){
if(p) return ;
int i = ef(le+1,n,re);
if(re==0){
if(id == k){
p = 1;
return ;
}
i=1;
while(vis[i]&&i<n) i++;
vis[i] = 1;
dfs(id+1,i,ans-x[i]);
vis[i] = 0;
if(p) return ;
}
for(i; i <= n; i++){
if(!vis[i]&&re>=x[i]){
vis[i] = 1;
if(p) return ;
dfs(id,i,re-x[i]);
vis[i] = 0;
i = nex[i];
if(i==n) return ;
}
}
return ;
}
bool cmp(int a,int b){
return a > b;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> x[i];
m += x[i];
}
sort(x+1,x+n+1,cmp);
nex[n] = n;
for(int i=n-1; i > 0; i--){
if(x[i] == x[i+1]) nex[i]=nex[i+1];
else nex[i]=i;
}
ans = x[1];
while(ans <= m/2){
if(m%ans==0){
k = m/ans;
vis[1] = 1;
dfs(1,1,ans-x[1]);
if(p){
cout << ans;
return 0;
}
}
ans++;
}
cout << m;
return 0;
}