MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)
existing=()
for pathname in "${MY_FILES[@]}"; do
if [ -e "$pathname" ]; then
existing+=( "$pathname" )
fi
done
The above creates a new array, existing, which contains the entries from the MY_FILES array corresponding to existing names in the filesystem. It does this by iterating over the entries in your array, testing each element in turn with the -e test, which is true if the given pathname exists. If the current pathname exists, it is appended as a new element at the end of the existing array.
If you also want to ensure that each name is a regular file, change the -e test into an -f test.