#include <bits/stdc++.h>
using namespace std;
int arr[1000005];
pair<int, int> dp[1 << 21];
void add(int mask, int ind) {
  if (dp[mask].first == ind || dp[mask].second == ind) return;
  if (dp[mask].first < ind) {
    dp[mask].second = dp[mask].first;
    dp[mask].first = ind;
  } else if (dp[mask].second < ind)
    dp[mask].second = ind;
}
void merge(int a, int b) {
  if (dp[b].first != -1) add(a, dp[b].first);
  if (dp[b].second != -1) add(a, dp[b].second);
}
int main() {
  memset(dp, -1, sizeof(dp));
  int n, mx = 0;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &arr[i]);
    mx = max(mx, (int)log2(arr[i]));
    add(arr[i], i);
  }
  int ans = 0;
  mx++;
  for (int i = 0; i < mx; i++)
    for (int j = 0; j < (1 << mx); j++)
      if ((j >> i) & 1) merge(j ^ (1 << i), j);
  for (int i = 1; i <= n; i++) {
    int now = 0, cur = (1 << mx) - 1 - arr[i];
    for (int j = mx - 1; j >= 0; j--) {
      if (((cur >> j) & 1) && dp[now ^ (1 << j)].second > i) now ^= (1 << j);
    }
    if (dp[now].second > i) ans = max(ans, now ^ arr[i]);
  }
  printf("%d\n", ans);
  return 0;
}
