package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
a := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &a[i])
}
lastPos := make([]int, 30)
lastValPos := make(map[int]int)
badLeft := make([]int, n+1)
for i := 1; i <= n; i++ {
bl := 0
for k := 0; k < 30; k++ {
if (a[i] & (1 << k)) == 0 {
if lastPos[k] > bl {
bl = lastPos[k]
}
}
}
if pos, exists := lastValPos[a[i]]; exists {
if pos > bl {
bl = pos
}
}
badLeft[i] = bl
for k := 0; k < 30; k++ {
if (a[i] & (1 << k)) != 0 {
lastPos[k] = i
}
}
lastValPos[a[i]] = i
}
nextPos := make([]int, 30)
for k := 0; k < 30; k++ {
nextPos[k] = n + 1
}
badRight := make([]int, n+1)
for i := n; i >= 1; i-- {
br := n + 1
for k := 0; k < 30; k++ {
if (a[i] & (1 << k)) == 0 {
if nextPos[k] < br {
br = nextPos[k]
}
}
}
badRight[i] = br
for k := 0; k < 30; k++ {
if (a[i] & (1 << k)) != 0 {
nextPos[k] = i
}
}
}
var invalid int64
for i := 1; i <= n; i++ {
invalid += int64(i-badLeft[i]) * int64(badRight[i]-i)
}
totalSubarrays := int64(n) * int64(n+1) / 2
validPairs := totalSubarrays - invalid
fmt.Println(validPairs)
}