#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<time.h>
using namespace std;
#define Nmax 15
#define Cmax 1010
struct big
{
int l[2010];
} B[5],maxim,C,nui,maxa,maxb,C2;
int v[15],l[2010],N,S,a;
void afis(big nr1)
{
for(int i=nr1.l[0];i>=1;--i)
printf("%d",nr1.l[i]);
printf("\n");
}
void inmu(big a,big b,big &c)
{
int T=0;
c.l[0]=a.l[0]+b.l[0]-1;
for(int i=1;i<=a.l[0];++i)
for(int j=1;j<=b.l[0];++j)
{
c.l[i+j-1]+=a.l[i]*b.l[j];
}
for(int i=1;i<=c.l[0];++i)
{
T=(c.l[i]+=T)/10;
c.l[i]%=10;
}
if(T) c.l[++c.l[0]]=T;
}
int compara(big a,big b)
{
if(b.l[0]>a.l[0])
{
return 1;
}
if(b.l[0]<a.l[0])
{
return -1;
}
for(int i=a.l[0];i>=1;--i)
{
if(a.l[i]>b.l[i])
{
return -1;
}
if(b.l[i]>a.l[i])
{
return 1;
}
}
return 0;
}
int main()
{
freopen("prod.in","r",stdin);
//freopen("prod.out","w",stdout);
for(int i=1;i<=9;++i)
{
scanf("%d",&v[i]);
for(;v[i];--v[i])
{
l[++a]=i;
}
}
reverse(l+1,l+a+1);
N=a;
int maxk=0,maxk2=0,q=0;
while(N>1)
{
C=nui;
maxk=l[++q],maxk2=l[++q];
--N;--N;
if(maxk==maxk2)
{
maxa.l[++maxa.l[0]]=maxk;
maxb.l[++maxb.l[0]]=maxk2;
}
else
{
maxa.l[++maxa.l[0]]=maxk;
maxb.l[++maxb.l[0]]=maxk2;
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
inmu(maxa,maxb,C);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
maxa.l[maxa.l[0]]=maxk2;
maxb.l[maxb.l[0]]=maxk;
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
inmu(maxa,maxb,C2);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
if(compara(C2,C)>0)
{
maxa.l[maxa.l[0]]=maxk;
maxb.l[maxb.l[0]]=maxk2;
}
else
{
maxa.l[maxa.l[0]]=maxk2;
maxb.l[maxb.l[0]]=maxk;
}
}
}
C=nui;
C2=nui;
if(N==1)
{
maxk=l[++q];
maxa.l[++maxa.l[0]]=maxk;
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
inmu(maxa,maxb,C);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
maxb.l[++maxb.l[0]]=maxk;
--maxa.l[0];
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
inmu(maxa,maxb,C2);
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
--maxb.l[0];
afis(C2);
afis(C);
if(compara(C2,C)>0)
{
maxa.l[++maxa.l[0]]=maxk;
}
else
{
maxb.l[++maxb.l[0]]=maxk;
}
}
C=nui;
reverse(maxb.l+1,maxb.l+maxb.l[0]+1);
reverse(maxa.l+1,maxa.l+maxa.l[0]+1);
//afis(maxa);
//afis(maxb);
inmu(maxa,maxb,C);
afis(C);
}