#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000010;
pair<int, int> dp[1 << 21];
int a[maxn];
void update(int mask, int val) {
  if (dp[mask].second == 0) {
    dp[mask].second = val;
    return;
  }
  if (dp[mask].first == val || dp[mask].second == val) return;
  if (val > dp[mask].second) {
    dp[mask].first = dp[mask].second;
    dp[mask].second = val;
  } else if (val > dp[mask].first) {
    dp[mask].first = val;
  }
}
void merge(int mask1, int mask2) {
  if (dp[mask2].first != 0) update(mask1, dp[mask2].first);
  if (dp[mask2].second != 0) update(mask1, dp[mask2].second);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    update(a[i], i);
  }
  for (int i = 0; i < 21; i++) {
    for (int j = 0; j < (1 << 21); j++) {
      if ((j >> i) & 1) {
        merge(j ^ (1 << i), j);
      }
    }
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    int mask = 0, tmp = (1 << 21) - 1 - a[i];
    for (int j = 20; j >= 0; j--) {
      if ((tmp >> j) & 1) {
        if (dp[mask ^ (1 << j)].first > i && dp[mask ^ (1 << j)].second != 0) {
          mask ^= (1 << j);
        }
      }
    }
    if (dp[mask].first > i && dp[mask].second != 0) ans = max(ans, a[i] | mask);
  }
  printf("%d\n", ans);
}
