package main
import (
"bufio"
"fmt"
"os"
)
// dp[i+1][j] = max(dp[i+1][j], dp[i][j] + B[n-j+i]*A[i])
// dp[i][j-1] = max(dp[i][j-1], dp[i][j] + B[n-j+i]*A[j])
func main() {
var in = bufio.NewReader(os.Stdin)
var out = bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
A, B := make([]int, n+1), make([]int, n+1)
var dp = make([][]int, n+2)
for i := 1; i<=n; i++ {
dp[i] = make([]int, n+2)
fmt.Fscan(in, &A[i])
}
dp[n+1] = make([]int, n+2)
for i := 1; i<=n; i++ {
fmt.Fscan(in, &B[i])
}
ans := 0
for i:= 1; i <= n; i++ {
for j:=n; j>=i; j--{
dp[i+1][j] = max(dp[i+1][j], dp[i][j] + B[n-j+i]*A[i])
dp[i][j-1] = max(dp[i][j-1], dp[i][j] + B[n-j+i]*A[j])
}
ans = max(ans, dp[i][i-1])
}
for i:=1; i <= n; i++ {
ans = max(ans, dp[i+1][i])
}
fmt.Fprintln(out, ans)
}
func max(a, b int) int {
if a < b {
return b
}
return a
}