#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 5;
const int mod = 1e9 + 7;
int a[maxn];
pair<int, int> dp[1 << 21];
void add(int x, int id) {
  if (dp[x].first == -1) {
    dp[x].first = id;
  } else if (dp[x].second == -1) {
    if (dp[x].first == id) return;
    dp[x].second = id;
    if (dp[x].first < dp[x].second) swap(dp[x].first, dp[x].second);
  } else if (dp[x].first < id) {
    dp[x].second = dp[x].first;
    dp[x].first = id;
  } else if (dp[x].second < id) {
    if (dp[x].first == id) return;
    dp[x].second = id;
  }
}
void merge(int x1, int x2) {
  add(x1, dp[x2].first);
  add(x1, dp[x2].second);
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    add(a[i], i);
  }
  int s = 1 << 21;
  for (int j = 0; j < 21; j++) {
    for (int i = 0; i < s; i++) {
      if (!(i >> j & 1)) merge(i, i ^ (1 << j));
    }
  }
  int ans = 0;
  for (int i = 1; i <= n - 2; i++) {
    int res = 0, d = 0;
    for (int j = 20; j >= 0; j--) {
      if (a[i] >> j & 1)
        res |= (1 << j);
      else {
        int mi = min(dp[d | (1 << j)].first, dp[d | (1 << j)].second);
        if (mi > i) res |= (1 << j), d |= (1 << j);
      }
    }
    ans = max(ans, res);
  }
  cout << ans << endl;
  return 0;
}
