#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6 + 50;
const int maxa = 2e6 + 50;
int n, a[maxn];
pair<int, int> dp[maxa];
void updata(int x, int pos) {
  if (dp[x].first < pos) {
    dp[x].second = dp[x].first;
    dp[x].first = pos;
  } else if (dp[x].second < pos && pos != dp[x].first)
    dp[x].second = pos;
}
void get_dp() {
  for (int i = 0; i <= 20; i++)
    for (int x = 0; x <= maxa - 1; x++) {
      if (((x >> i) & 1) == 1) {
        updata(x ^ (1 << i), dp[x].first);
        updata(x ^ (1 << i), dp[x].second);
      }
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    updata(a[i], i);
  }
  get_dp();
  int ans = 0;
  for (int i = 1; i <= n - 2; i++) {
    int w = 0;
    for (int j = 20; j >= 0; j--) {
      if (((a[i] >> j) & 1) == 0 && dp[w | (1 << j)].first > i &&
          dp[w | (1 << j)].second > i)
        w = w | (1 << j);
    }
    ans = max(ans, a[i] | w);
  }
  printf("%d", ans);
  return 0;
}
