//
//写得很乱,三个for循环是可以合并的,但是当时忘记改了....时间复杂度O(n),空间复杂度O(1)
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <deque>
#include <set>
#include <stack>
#include <map>
#include<math.h>
#include<algorithm>
#include<string>
#include <queue>
using namespace std;
int main(){
int len;
while(cin>>len){
vector<long long>num(len,0);
bool f=false;
for(int i=0;i<len;i++)
{ cin>>num[i];
if(num[i]==0)
f=true;
}
if(len<3)
cout<<-1<<endl;
else{
long long max1=-99999999;long long max2=-999999999;long long max3=-999999999;
long long min1=10000000;long long min2=100000000;long long min3=100000000;
for(int i=0;i<len;i++){
if(num[i]>max1)
{ max3=max2;
max2=max1;
max1=num[i];
}
else if(num[i]>max2)
{
max3=max2;
max2=num[i];
}
else if(num[i]>max3)
{
max3=num[i];
}
} // 遍历一遍求出最大的三个数
for(int i=0;i<len;i++){
if(num[i]<min1)
{ min3=min2;
min2=min1;
min1=num[i];
}
else if(num[i]<min2)
{
min3=min2;
min2=num[i];
}
else if(num[i]<min3)
{
min3=num[i];
}
}//遍历一遍,求出最小的三个数
long long res=-999999999;
res=max(res,min1*min2*min3);
res=max(res,min1*min2*max1);
res=max(res,max1*max2*max3);
res=max(res,max1*max2*min1);//四种情况求最大值
if(f&&res<0)
res=0;//考虑是不是有0存在且结果为负数
cout<<res<<endl;
}
}
}