#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;

typedef long long ll;
typedef pair<int,int> ii;
typedef tree<ii,null_type,less<ii>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
// *st.find_by_order(index), 0-based
// order_of_key(e)

const int mx=200*80+1000 + 7;
const int mx2=mx/100 + 7;
const int mx3=80 + 7;

bool dp[mx3][mx][mx2];

int main() {
	cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
	int N; cin>>N;
	vector<int> A(N+1);
	for (int i=1; i<=N; i++)
		cin>>A[i];
	for (int i=0; i<mx3; i++)
		for (int j=0; j<mx; j++)
			for (int k=0; k<mx2; k++)
				dp[i][j][k]=false;

	dp[0][1000][0]=true;
	for (int i=1; i<=N; i++) {
		for (int j=0; j<mx; j++)
			for (int k=0; k<mx2; k++)
				dp[i][j][k]=dp[i-1][j][k];
		for (int j=0; j<mx; j++) {
			for (int k=0; k<mx2; k++) {
				if(!dp[i-1][j][k]) continue;
				dp[i][j+A[i]*k][0]=true;
			}
		}
		for (int j=0; j<mx; j++) {
			for (int k=0; k<mx2; k++) {
				if(!dp[i-1][j][k]) continue;
				int q=j/A[i], r=j%A[i];
				dp[i][r][k+q]=true;
			}
		}
	}
	int ret=0;
	for (int i=0; i<mx; i++)
		for (int j=0; j<mx2; j++)
			if(dp[N][i][j])
				ret=max(ret,i+j*A[N]);
	cout<<ret<<"\n";
	return 0;
}