```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
return a
}
func lcm(a, b int64) int64 {
if a == 0 || b == 0 {
return 0
}
return (a / gcd(a, b)) * b
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
a := make([]int64, n)
for i := 0; i < n; i++ {
scanner.Scan()
val, _ := strconv.ParseInt(scanner.Text(), 10, 64)
a[i] = val
}
S := make([]int64, n)
S[n-1] = a[n-1]
for i := n - 2; i >= 0; i-- {
S[i] = gcd(a[i], S[i+1])
}
var ans int64 = 0
for i := 0; i < n-1; i++ {
ans = gcd(ans, lcm(a[i], S[i+1]))
}
fmt.Println(ans)
}
```