#include <bits/stdc++.h>
using namespace std;
const int M = 200002;
int val[M];
vector<int> vec[33];
set<int> st;
struct Nod {
  int v;
  int id;
  bool operator<(const Nod &cmp) const {
    if (v == cmp.v) return id < cmp.id;
    return v > cmp.v;
  }
} p[M];
int n;
void init() {
  for (int i = 0; i < 32; i++) {
    for (int j = 0; j < n; j++) {
      if (val[j] & (1 << i)) {
        vec[i].push_back(j);
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &val[i]);
    p[i].v = val[i];
    p[i].id = i;
  }
  sort(p, p + n);
  init();
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    Nod u = p[i];
    set<int>::iterator it = st.upper_bound(u.id);
    int L, R;
    if (it == st.end()) {
      R = n - 1;
    } else
      R = *it - 1;
    if (it == st.begin()) {
      L = 0;
    } else {
      it--;
      L = *it + 1;
    }
    int l = L, r = R;
    for (int j = 0; j < 32; j++) {
      if ((u.v & (1 << j)) == 0) {
        int tl = upper_bound(vec[j].begin(), vec[j].end(), u.id) -
                 vec[j].begin() - 1;
        if (tl >= 0) l = max(l, vec[j][tl] + 1);
        int tr =
            upper_bound(vec[j].begin(), vec[j].end(), u.id) - vec[j].begin();
        if (tr < vec[j].size()) r = min(r, vec[j][tr] - 1);
      }
    }
    ans += 1ll * (u.id - l + 1) * (r - u.id + 1);
    st.insert(u.id);
  }
  printf("%I64d\n", 1ll * n * (n + 1) / 2 - ans);
  return 0;
}
