That is called "scientific notation". And 2E6 is not 2^6, it's 2x10^6. How about this:
library(ggplot2)
library(scales)
library(ggthemes)
# data
set.seed(123)
df <- data.frame(genes = runif(20)*12e6+1e6,
Prot = runif(20)*20+5)
# formatting function
# https://stackoverflow.com/questions/10762287/how-can-i-format-axis-labels-with-exponents-with-ggplot2-and-scales
scientific <- function(x){
ifelse(x==0, "0", parse(text=gsub("[+]", "", gsub("e", " %*% 10^", scientific_format()(x)))))
}
# plot
ggplot() +
labs(x="Proteome size (codons)", y="Genes in pathway", title="A") +
geom_point(data=df, mapping=aes(x=genes, y=Prot), size=3) +
geom_abline(intercept=5, slope=1e-6, size=1.2) +
theme_few() +
scale_x_continuous(breaks=seq(2e6,12e6,2e6), label=scientific) +
scale_y_continuous(limits=c(0,30))

Created on 2019-06-27 by the reprex package (v0.3.0)