#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const int LG = 30;
const int INF = (int)1e9 + 7;
struct Node {
  int val, pos;
};
Node oper(Node a, Node b) {
  if (a.val != b.val) {
    return a.val > b.val ? a : b;
  }
  return a.pos < b.pos ? a : b;
}
struct STree {
  vector<Node> st;
  int n;
  STree(int n) : st(4 * n + 5, ((Node){-INF, INF})), n(n) {}
  void init(int k, int s, int e, int *a) {
    if (s + 1 == e) {
      st[k] = (Node){a[s], s};
      return;
    }
    int m = (s + e) / 2;
    init(2 * k, s, m, a);
    init(2 * k + 1, m, e, a);
    st[k] = oper(st[2 * k], st[2 * k + 1]);
  }
  Node query(int k, int s, int e, int a, int b) {
    if (s >= b || e <= a) return ((Node){-INF, INF});
    if (s >= a && e <= b) return st[k];
    int m = (s + e) / 2;
    return oper(query(2 * k, s, m, a, b), query(2 * k + 1, m, e, a, b));
  }
  void init(int *a) { init(1, 0, n, a); }
  Node query(int a, int b) { return query(1, 0, n, a, b); }
};
int n, A[MAXN];
vector<int> P[LG];
int p[LG];
int main() {
  while (scanf("%d", &n) >= 1) {
    for (int i = (0); i < (int)(n); i++) scanf("%d", &A[i]);
    STree S(n);
    S.init(A);
    for (int i = (0); i < (int)(LG); i++) {
      for (int j = (0); j < (int)(n); j++) {
        if (A[j] & (1 << i)) P[i].push_back(j);
      }
      p[i] = 0;
    }
    long long ans = 0;
    for (int i = (0); i < (int)(n); i++) {
      vector<int> r(1, n);
      for (int j = (0); j < (int)(LG); j++) {
        if (p[j] < ((int)P[j].size())) {
          if (P[j][p[j]] == i) p[j]++;
          if (p[j] < ((int)P[j].size())) {
            if (A[i] & (1 << j))
              ;
            else {
              r.push_back(P[j][p[j]]);
            }
          }
        }
      }
      sort(r.begin(), r.end());
      r.resize(unique(r.begin(), r.end()) - r.begin());
      int v = A[i];
      for (int i = (0); i < (int)(((int)r.size()) - 1); i++) {
        int a = r[i];
        int b = r[i + 1];
        Node g = S.query(a, b);
        v |= A[a];
        if (g.val != v) {
          ans += b - a;
        } else {
          ans += g.pos - a;
        }
      }
    }
    printf("%lld\n", ans);
  }
  return 0;
}
