package main
import (
"fmt"
)
//时间复杂度O(N*logN)
//空间复杂度O(1)
func main() {
a := 0
_, _ = fmt.Scan(&a)
//fmt.Println(a)
nums := make([]int, a)
for i:=0; i < a; i++ {
b := 0
_, _ = fmt.Scan(&b)
nums[i] = b
}
//fmt.Println(nums)
quickSort(nums, 0, len(nums)-1)
//fmt.Println(nums)
//如果最大开始三个都是正数
//最大前一个是正数 后面开始是负的最小两个数值
//为0则跳过
a = 0
if len(nums) >= 3 && nums[0] > 0 && nums[1] > 0 && nums[2] > 0 {
a = nums[0]*nums[1]*nums[2]
}
b := 0
if len(nums) >= 3 && nums[len(nums)-1] < 0 && nums[len(nums)-2] < 0 && nums[0] > 0 {
b = nums[len(nums)-1] * nums[len(nums)-2] * nums[0]
}
if a > b {
fmt.Println(a)
}else {
fmt.Println(b)
}
}
func quickSort(nums []int, left ,right int) {
if left >= right {
return
}
p := getPartition(nums, left, right)
quickSort(nums, left, p-1)
quickSort(nums, p+1, right)
}
func getPartition(nums []int, left, right int) int {
sentry := nums[right]
i := left
for j := left; j <= right; j++ {
if nums[j] > sentry {
nums[i], nums[j] = nums[j], nums[i]
i++
}
}
nums[i], nums[right] = sentry, nums[i]
return i
}