import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
/**
* @author khokharnikunj8
*/
public class Main {
public static void main
(String[] args
) { public void run() {
new Main().solve();
}
}, "1", 1 << 26).start();
}
void solve() {
ScanReader in = new ScanReader(inputStream);
MAXOR solver = new MAXOR();
solver.solve(1, in, out);
out.close();
}
static class MAXOR {
public void solve
(int testNumber, ScanReader in,
PrintWriter out
) { int n = in.scanInt();
int[] ar = new int[n];
for (int i = 0; i < n; i++) ar[i] = in.scanInt();
boolean[] SOSdp1 = new boolean[1 << 20];
for (int i : ar) SOSdp1[i] = true;
for (int i = 0; i < 20; ++i)
for (int mask = 0; mask < (1 << 20); ++mask) {
if ((mask & 1 << i) != 0)
SOSdp1[mask ^ (1 << i)] |= SOSdp1[mask];
}
int[] SOSdp2 = new int[1 << 20];
for (int i = 0; i < (1 << 20); i++) if (SOSdp1[i]) SOSdp2[i] = i;
for (int i = 0; i < 20; ++i)
for (int mask = 0; mask < (1 << 20); ++mask) {
if ((mask & 1 << i) != 0)
SOSdp2
[mask
] = Math.
max(SOSdp2
[mask
^ (1 << i
)], SOSdp2
[mask
]); }
int ans = 0;
for (int i = 0; i < n; i++) {
ans
= Math.
max(ans, SOSdp2
[((1 << 20) - 1) ^ ar
[i
]] | ar
[i
]); }
out.println(ans);
}
}
static class ScanReader {
private byte[] buf = new byte[4 * 1024];
private int index;
private int total;
}
private int scan() {
if (index >= total) {
index = 0;
try {
total = in.read(buf);
e.printStackTrace();
}
if (total <= 0) return -1;
}
return buf[index++];
}
public int scanInt() {
int integer = 0;
int n = scan();
while (isWhiteSpace(n)) n = scan();
int neg = 1;
if (n == '-') {
neg = -1;
n = scan();
}
while (!isWhiteSpace(n)) {
if (n >= '0' && n <= '9') {
integer *= 10;
integer += n - '0';
n = scan();
}
}
return neg * integer;
}
private boolean isWhiteSpace(int n) {
if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1) return true;
else return false;
}
}
}