```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
a := make([]int, n)
b := make([]int, n)
c := make([]int, n)
scanner.Scan()
parts := strings.Fields(scanner.Text())
for i := 0; i < n; i++ {
a[i], _ = strconv.Atoi(parts[i])
}
scanner.Scan()
parts = strings.Fields(scanner.Text())
for i := 0; i < n; i++ {
b[i], _ = strconv.Atoi(parts[i])
}
scanner.Scan()
parts = strings.Fields(scanner.Text())
for i := 0; i < n; i++ {
c[i], _ = strconv.Atoi(parts[i])
}
if n == 1 {
fmt.Println(a[0])
return
}
dp0 := a[0]
dp1 := b[0]
for i := 1; i < n-1; i++ {
newDp0 := max(dp0+b[i], dp1+a[i])
newDp1 := max(dp0+c[i], dp1+b[i])
dp0, dp1 = newDp0, newDp1
}
ans := max(dp0+b[n-1], dp1+a[n-1])
fmt.Println(ans)
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
```